﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;
using System.Data.OleDb;
using Facebook;

namespace FlyShop
{
    public partial class FrmPublicaPromo : Form
    {

        int codPromocao;
        String nomePromo;
        String descPromo;
        String dataCadPromo;
        String vlrDescPromocao;

        OleDbConnection conexao;
        String strConexao = "Provider=MSDAORA;Data Source=localhost;Persist Security Info=True;User ID=pi;Password=pi";
        String sqlConsultaClientes = "select c.flag_marketing, p.email from cliente c join pessoa p on p.cod_pessoa = c.cod_pessoa and c.flag_marketing = 's'";

        public FrmPublicaPromo()
        {
            InitializeComponent();
        }

        private void FrmPublicaPromo_Load(object sender, EventArgs e)
        {
            // Estabelece conexão com o bd
            try
            {
                conexao = new OleDbConnection(strConexao);
                conexao.Open();
            }
            catch (Exception)
            {
                lblMensagem.Text = "Não foi possível se conectar ao banco de dados.";
                btnEmail.Enabled = false;
            }
        }

        public void recebe(int cod, String nome, String descricao, String dataCadastro, String vlrDesconto)
        {
            codPromocao = cod;
            nomePromo = nome;
            descPromo = descricao;
            richTextDescricaoValor.Text = descricao + "\n\nDesconto R$: " + vlrDesconto;
            dataCadPromo = dataCadastro;
            vlrDescPromocao = vlrDesconto;

            lblNomeValor.Text = nomePromo;
            lblDataCadValor.Text = dataCadastro;
            lblDescontoValor.Text = vlrDesconto;

        }

        private void btnEmail_Click(object sender, EventArgs e)
        {
            try
            {
                // Ataca o banco para obter os clientes
                OleDbCommand comandoConClientes = new OleDbCommand(sqlConsultaClientes, conexao);
                OleDbDataReader drConClientes = comandoConClientes.ExecuteReader();

                if (drConClientes.HasRows)
                {
                    // Incrementa barra de progresso
                    pbPublicacao.Increment(30);

                    // Monta a mensagem de email
                    MailMessage mensagem = new MailMessage();
                    mensagem.From = new MailAddress("intellisoftware3@gmail.com", "Intelli Software");

                    // Itera em cada registro incluindo um destinatário a mensagem
                    while (drConClientes.Read())
                    {
                        String email = drConClientes["email"].ToString();
                        mensagem.To.Add(email);
                    }


                    mensagem.Subject = "FlyShop Promoção! " + nomePromo;

                    String corpoMensagem = "Imperdível!\n" +
                        richTextDescricaoValor.Text;

                    mensagem.Body = corpoMensagem;


                    // Configura o cliente de acesso de email
                    SmtpClient cliente = new SmtpClient();
                    cliente.Host = "smtp.gmail.com";
                    cliente.EnableSsl = true;
                    cliente.Credentials = new NetworkCredential("intellisoftware3@gmail.com", 
                        "qwertyintelli");

                    // Incrementa barra de progresso
                    pbPublicacao.Increment(50);

                    // Tenta enviar a mensagem
                    try
                    {
                        cliente.Send(mensagem);
                        // Incrementa barra de progresso
                        pbPublicacao.Increment(100);

                        // Desabilita para enviar apenas uma vez
                        btnEmail.Enabled = false;

                        lblMensagem.Text = "A Promoção foi enviada para o e-mail dos clientes.";
                    }
                    catch (Exception e1)
                    {
                        lblMensagem.Text = "Não foi possível publicar via e-mail. Verifique as configurações.";
                        pbPublicacao.Value = 0;
                        MessageBox.Show(e1.Message);
                    }

                }
                else
                {
                    lblMensagem.Text = "Não existem clientes para publicar a promoção via e-mail.";
                }
        
            }
            catch (Exception)
            {
                lblMensagem.Text = "Não foi possível se conectar ao banco de dados.";
                btnEmail.Enabled = false;
                pbPublicacao.Value = 0;
            }

           

        }

        private void FrmPublicaPromo_FormClosed(object sender, FormClosedEventArgs e)
        {
            conexao.Close();
        }

        private void btnFacebook_Click(object sender, EventArgs e)
        {
            try
            {
                // Configuração do facebook
                FacebookClient fb = new FacebookClient(AppSettingsFacebook.Default.Access_token);
                fb.AppId = "483461915100454";
                fb.AppSecret = "60306382dc5479fe2ce96d07b13cdad7";
                fb.AccessToken = AppSettingsFacebook.Default.Access_token;
                Dictionary<string, object> postargs = new Dictionary<string, object>();

                // Monta a mensagem a ser publicada
                string mensagem = "Imperdível!\n\n" +
                    richTextDescricaoValor.Text;

                // Posta a mensagem
                postargs["message"] = mensagem;
                fb.Post("/1430334213852904/feed", postargs);

                // Atualiza as informações da interface
                lblMensagem.Text = "Promoção publicada no facebook com sucesso.";
                pbPublicacao.Value = 100;
                btnFacebook.Enabled = false;
            }

            catch 
            { 
                lblMensagem.Text = "Não foi possivel publicar a promoção no facebook."; 
            }
               

        }

        private void FrmPublicaPromo_KeyDown(object sender, KeyEventArgs e)
        {
            //Hotkey para a tecla ESC fechar a janela
            if (e.KeyData == (Keys.Escape))
            {
                this.Close();
            }
        }
    }
}
